Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

330
Views
Sugerencia de tipo Python para Iterable[str] que no es str

En Python, ¿hay alguna manera de distinguir entre cadenas y otros iterables de cadenas?

Una str es válida como tipo Iterable[str] , pero puede que no sea la entrada correcta para una función. Por ejemplo, en este ejemplo trivial que pretende operar en secuencias de nombres de archivos:

 from typing import Iterable def operate_on_files(file_paths: Iterable[str]) -> None: for path in file_paths: ...

Pasar un solo nombre de archivo produciría un resultado incorrecto, pero la verificación de tipo no lo detectaría. Sé que puedo verificar tipos de bytes o cadenas en tiempo de ejecución, pero quiero saber si es posible detectar errores tontos como ese con una herramienta de verificación de tipos.

Revisé el módulo collections.abc y no parece haber ningún abc que incluya iterables típicos (por ejemplo, listas, tuplas) pero excluya cadenas. De manera similar, para el módulo de typing , no parece haber un tipo para iterables que no incluyan cadenas.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

A partir de marzo de 2022, la respuesta es no .

Este tema se ha discutido desde al menos julio de 2016. Sobre una propuesta para distinguir entre str e Iterable[str] , Guido van Rossum escribe:

Dado que str es un iterable válido de str , esto es complicado. Se han hecho varias propuestas, pero no encajan fácilmente en el sistema de tipos.

Deberá enumerar todos los tipos que desea que sus funciones acepten explícitamente , utilizando Union (anterior a 3.10) o | (3.10 y superior).

por ejemplo, para versiones anteriores a 3.10, use:

 from typing import Union ## Heading ## def operate_on_files(file_paths: Union[TypeOneName, TypeTwoName, etc.]) -> None: for path in file_paths: ...

Para 3.10 y superior, utilice:

 ## Heading ## def operate_on_files(file_paths: TypeOneName | TypeTwoName | etc.) -> None: for path in file_paths: ...

Si está utilizando Pytype, no tratará a str como un Iterable[str] (como lo señaló Kelly Bundy ). Sin embargo, este comportamiento es específico del verificador de tipos y no es ampliamente compatible con otros verificadores de tipos.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!